﻿using Npgsql;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Services;

namespace Ortodoctor.Funcionario.modelo
{
    class modeloComparecimento
    {
        //string connectionstring = ("Server=186.202.152.24;Port=5432;User Id=ortodoctor1;Password=DycbqDfHLI;Database=ortodoctor1;MinPoolSize=5;CommandTimeout=60;");
        string connectionstring = ("Server=localhost;Port=5432;User Id=postgres;Password=postgres;Database=ortodoctor;MinPoolSize=5;CommandTimeout=60;"); NpgsqlCommand com;
        NpgsqlConnection conn;
        NpgsqlDataAdapter da;

        public modeloComparecimento()
        {
            conn = new NpgsqlConnection(connectionstring);
            conn.Open();
        }


        internal DataTable getAll(int id_clinica, string data)
        {
            data = Convert.ToDateTime(data).ToString("MM/dd/yyyy");
            DataTable dt = new DataTable();
            //System.Windows.Forms.MessageBox.Show(data);
            try
            {
                //con.open();
                //System.Windows.Forms.MessageBox.Show(data.ToString());
//                String sql = @"
//                    select id_cliente, data, cliente.nome as nome_cliente, funcionario.nome as nome_dentista from comparecimento 
//                    inner join cliente using(id_cliente) inner join dentista using (id_dentista)
//                    inner join funcionario using(id_funcionario) where dentista.id_clinica = 
//                    " + id_clinica + " and data = '"+data+"'";
                String sql = @"
                    select horario, id_cliente, data, cliente.nome as nome_cliente, funcionario.nome as nome_dentista from comparecimento 
                    inner join cliente using(id_cliente) 
                    inner join funcionario on funcionario.id_funcionario=comparecimento.id_dentista where data = '" + data + "'";
                if (HttpContext.Current.Session["USUARIO_ACESSO"].ToString().CompareTo("2") != 0)
                {
//                    sql = @"
//                        select id_cliente, data, cliente.nome as nome_cliente, funcionario.nome as nome_dentista from comparecimento 
//                        inner join cliente using(id_cliente) inner join dentista using (id_dentista)
//                        inner join funcionario using(id_funcionario) where dentista.id_clinica = 
//                        " + id_clinica + " and data = '" + data + "' and cliente.id_clinica=" + HttpContext.Current.Session["ID_CLINICA"];
                    sql = @"
                        select horario, id_cliente, data, cliente.nome as nome_cliente, funcionario.nome as nome_dentista from comparecimento 
                        inner join cliente using(id_cliente)
                        inner join funcionario on funcionario.id_funcionario=comparecimento.id_dentista where funcionario.id_clinica = 
                        " + id_clinica + " and data = '" + data + "' and cliente.id_clinica=" + HttpContext.Current.Session["ID_CLINICA"];
                }
                NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);
                da.Fill(dt);
            }
            finally
            {
                conn.Close();
            }
            return dt;
        }

        internal DataTable getAll(string data)
        {
            DataTable dt = new DataTable();
            try
            {
                data = Convert.ToDateTime(data).ToString("MM/dd/yyyy");
                //con.open();
//                String sql = @"
//select id_cliente, data, cliente.nome as nome_cliente, funcionario.nome as nome_dentista from comparecimento 
//inner join cliente using(id_cliente) inner join dentista using (id_dentista)
//inner join funcionario using(id_funcionario) where data = '"+data+"'";
                String sql = @"
select horario, id_cliente, data, cliente.nome as nome_cliente, funcionario.nome as nome_dentista from comparecimento 
inner join cliente using(id_cliente) inner join funcionario on funcionario.id_funcionario=comparecimento.id_dentista where data = '" + data + "'";
                if (HttpContext.Current.Session["USUARIO_ACESSO"].ToString().CompareTo("2") != 0)
                {
//                    sql = @"
//select id_cliente, data, cliente.nome as nome_cliente, funcionario.nome as nome_dentista from comparecimento 
//inner join cliente using(id_cliente) inner join dentista using (id_dentista)
//inner join funcionario using(id_funcionario) where data = '" + data + "' and cliente.id_clinica=" + HttpContext.Current.Session["ID_CLINICA"];
                    sql = @"
select horario, id_cliente, data, cliente.nome as nome_cliente, funcionario.nome as nome_dentista from comparecimento 
inner join cliente using(id_cliente) inner join funcionario on funcionario.id_funcionario=comparecimento.id_dentista
where data = '" + data + "' and cliente.id_clinica=" + HttpContext.Current.Session["ID_CLINICA"];
                }
                NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);
                da.Fill(dt);
            }
            finally
            {
                conn.Close();
            }
            return dt;
        }

        internal DataTable getClientDia(int id, string data)
        {

            DataTable dt = new DataTable();
            try
            {
                //con.open();
                data = Convert.ToDateTime(data).ToString("MM/dd/yyyy");
                String sql = @"
                                select * from comparecimento where id_cliente= " + id + @" and data = '" + data + "'";
                NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);
                da.Fill(dt);
            }
            finally
            {
                conn.Close();
            }
            return dt;
        }



        public bool insert(int id_cliente, int id_dentista, string data, string hora)
        {
            data = Convert.ToDateTime(data).ToString("MM/dd/yyyy");

            try
            {
                //con.open();
                String sql = "INSERT INTO Comparecimento(id_cliente, id_dentista, data, horario) " +
                             "VALUES (:p1, :p2, :p3, :p4)";
                NpgsqlCommand com = new NpgsqlCommand(sql, conn);
                com.Parameters.AddWithValue("p1", id_cliente);
                com.Parameters.AddWithValue("p2", id_dentista);
                com.Parameters.AddWithValue("p3", data);
                com.Parameters.AddWithValue("p4", hora);
                try
                {
                    com.ExecuteNonQuery();
                }
                catch 
                {
                }

                return true;
            }
            catch
            {
                return false;
            }
            finally
            {
                conn.Close();
            }
        }

        public void delete(int id_cliente, string data)
        {
            try
            {
                //con.open();
                String sql = "DELETE FROM Comparecimento WHERE ID_CLIENTE = "+id_cliente+" AND DATA = '" + Convert.ToDateTime(data).ToString("MM/dd/yyyy") + "'";
                NpgsqlCommand com = new NpgsqlCommand(sql, conn);
                com.ExecuteNonQuery();
            }
            finally
            {
                conn.Close();
            }
        }

        public bool getMaxDate()
        {
            bool retorno = false;
            try
            {
                DataTable dt = new DataTable();
                //con.open();
                String sql = @"
                                select max(data) as date from comparecimento";
                NpgsqlDataAdapter da = new NpgsqlDataAdapter(sql, conn);
                da.Fill(dt);
                if (dt.Rows.Count == 1 && dt.Rows[0]["date"] != DBNull.Value)
                    retorno = Convert.ToDateTime(dt.Rows[0]["date"]).ToString("dd/MM/yyyy").Equals(DateTime.Now.AddDays(-1).ToString("dd/MM/yyyy")) || Convert.ToDateTime(dt.Rows[0]["date"]).ToString("dd/MM/yyyy").Equals(DateTime.Now.ToString("dd/MM/yyyy"));
            }
            finally
            {
                conn.Close();
            }
            return retorno;
        }
    }
}
